library(stringr)

# List all coins
get_list_of_all_coinmarketcap_coins <- function() {
    url = 'https://coinmarketcap.com/all/views/all/'
    url_parsed <- htmlParse(getURL(url), asText = TRUE)
    tableNodes <- getNodeSet(url_parsed, c('//*[@id="currencies-all"]'))
    all_currency <- readHTMLTable(tableNodes[[1]])
    
    currencies <- gsub("\n","", all_currency$Name)
    
    currencies <- str_replace(gsub("\\s+", " ", str_trim(currencies)), "B", "b")
    
    c_symbols <- c()
    c_names <- c()
    
    for(c in currencies) {
        cr <- strsplit(c, " ")
        c_symbols <- c(c_symbols, cr[[1]][1])
        c_names <- c(c_names, cr[[1]][1])
    }
    
    cr_df <- cbind(c_names, c_symbols)
    colnames(cr_df) <- c('Name', 'Symbol')
    
    return(as.data.frame(cr_df))
}

# Function to create url from start to end
get_currency_data_download_url <- function(currency, history_start, history_end) {
  # Processing URL to download data
  url_cmarket <- 'https://coinmarketcap.com/'
  currency_part <- paste('currencies/', currency, sep="") 
  url_pre <- paste(url_cmarket, currency_part, sep="")

  # Append start date
  url_s <- paste(url_pre, '/historical-data/?start=', sep="")
  url_s <- paste(url_s, history_start, sep="") 

  # Append end date
  url_e <- paste(url_s, '&end=', sep="")
  url_e <- paste(url_e, history_end, sep="") 

  url <- url_e
}  

library(RCurl)
## Loading required package: bitops
library(XML)
library(bitops)
get_currency_historical_data <- function(url) {
  url_parsed <- htmlParse(getURL(url), asText = TRUE)
  tableNodes <- getNodeSet(url_parsed, c('//*[@class="table"]'))
  
  currency_historical_data <- readHTMLTable(tableNodes[[1]])
  
  return(currency_historical_data)
}                                         
currency <- 'bitcoin'
history_start <- '20090101'
history_end <- '20171224'

url <- get_currency_data_download_url(currency, history_start, history_end)

data <- get_currency_historical_data(url)
btc_data <- data

# Get the data
date <- as.Date(rev(data$Date), "%B %d, %Y")
price_high <- as.numeric(as.character(rev(data$High)))
price_low <- as.numeric(as.character(rev(data$Low)))
price_open <- as.numeric(as.character(rev(data$Open)))
price_close <- as.numeric(as.character(rev(data$Close)))
vol <- as.numeric(gsub(",", "", as.character(rev(data$Volume))))
## Warning: NAs introduced by coercion
vol[is.na(vol)] <- 0
mc <- as.numeric(gsub(",", "", as.character(rev(data$`Market Cap`))))
mc[is.na(mc)] <- 0


# plotting
library(plotly)
## Loading required package: ggplot2
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(quantmod)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: TTR
## Version 0.4-0 included new data defaults. See ?getSymbols.
data$Date <- rev(date)
p <- data %>%
  plot_ly(x = ~Date, type="ohlc",
          open = ~Open, close = ~Close,
          high = ~High, low = ~Low) %>%
  layout(title = "Bitcoin Historical Price")

p
plot(date, price_high, cex=0.05)
lines(date, price_high)
lines(date, price_low, col='green')
points(date, price_low, col='green', cex=0.05)
lines(date, price_open, col='red')
points(date, price_open, col='red', cex=0.05)
lines(date, price_close, col='blue')
points(date, price_close, col='blue', cex=0.05)

currency <- 'ethereum'
history_start <- '20090101'
history_end <- '20171224'

url <- get_currency_data_download_url(currency, history_start, history_end)

data <- get_currency_historical_data(url)
eth_data <- data

# Get the data
date <- as.Date(rev(data$Date), "%B %d, %Y")
price_high <- as.numeric(as.character(rev(data$High)))
price_low <- as.numeric(as.character(rev(data$Low)))
price_open <- as.numeric(as.character(rev(data$Open)))
price_close <- as.numeric(as.character(rev(data$Close)))
vol <- as.numeric(gsub(",", "", as.character(rev(data$Volume))))
vol[is.na(vol)] <- 0
mc <- as.numeric(gsub(",", "", as.character(rev(data$`Market Cap`))))
## Warning: NAs introduced by coercion
mc[is.na(mc)] <- 0


# plotting
library(plotly)
library(quantmod)
plot_title <- paste(currency, "Historical Price", sep=" ")

data$Date <- rev(date)
p <- data %>%
  plot_ly(x = ~Date, type="ohlc",
          open = ~Open, close = ~Close,
          high = ~High, low = ~Low) %>%
  layout(title = plot_title)

p
currency <- 'zcoin'
history_start <- '20090101'
history_end <- '20171224'

url <- get_currency_data_download_url(currency, history_start, history_end)

data <- get_currency_historical_data(url)
zcoin_data <- data

# Get the data
date <- as.Date(rev(data$Date), "%B %d, %Y")
price_high <- as.numeric(as.character(rev(data$High)))
price_low <- as.numeric(as.character(rev(data$Low)))
price_open <- as.numeric(as.character(rev(data$Open)))
price_close <- as.numeric(as.character(rev(data$Close)))
vol <- as.numeric(gsub(",", "", as.character(rev(data$Volume))))
vol[is.na(vol)] <- 0
mc <- as.numeric(gsub(",", "", as.character(rev(data$`Market Cap`))))
## Warning: NAs introduced by coercion
mc[is.na(mc)] <- 0


# plotting
library(plotly)
library(quantmod)
plot_title <- paste(currency, "Historical Price", sep=" ")

data$Date <- rev(date)
p <- data %>%
  plot_ly(x = ~Date, type="ohlc",
          open = ~Open, close = ~Close,
          high = ~High, low = ~Low) %>%
  layout(title = plot_title)

p
library(plotly)

cur1_dat <- btc_data
cur2_dat <- eth_data
cur1_dat$Name <- 'BTC'
cur2_dat$Name <- 'ETH'

cur1_p_date <- as.Date(cur1_dat$Date, "%B %d, %Y")
cur2_p_date <- as.Date(cur2_dat$Date, "%B %d, %Y")

# Find the lowest timestamp to start
min_cur1_date <- min(cur1_p_date)
min_cur2_date <- min(cur2_p_date)
min_date <- max(min_cur1_date, min_cur2_date)

# Find the latest timestamp to end
max_cur1_date <- max(cur1_p_date)
max_cur2_date <- max(cur2_p_date)
max_date <- min(max_cur1_date, max_cur2_date)

cur1_s_id <- which(cur1_p_date == min_date)
cur1_e_ed <- which(cur1_p_date == max_date)

cur2_s_id <- which(cur2_p_date == min_date)
cur2_e_ed <- which(cur2_p_date == max_date)

# Create date sequence for x axis
x <- cur1_p_date[cur1_s_id:(cur1_e_ed + 1)]
n <- length(x) + 1
date <- as.character.Date(x)
y1_dat <- as.numeric(as.character(cur1_dat$Close[cur1_s_id:(cur1_e_ed + 1)]))
y2_dat <- as.numeric(as.character(cur2_dat$Close[cur2_s_id:(cur2_e_ed + 1)]))

trace1 <- list(
  x = c(date),
  y = c(y1_dat),
  line = list(color = "rgb(221, 42, 145)"), 
  marker = list(
    color = "rgb(0, 0, 155)", 
    size = 2
  ), 
  mode = "lines+markers", 
  name = cur1_dat$Name, 
  opacity = 1, 
  type = "scatter", 
  uid = "e27bd3", 
  xaxis = "x", 
  yaxis = "y" 
)
trace2 <- list(
  x = c(date),
  y = c(y2_dat), 
  line = list(color = "rgb(36, 32, 29)"), 
  marker = list(
    color = "rgb(228, 103, 9)", 
    size = 5
  ), 
  mode = "lines+markers", 
  name = cur2_dat$Name, 
  type = "scatter", 
  uid = "efd000", 
  yaxis = "y2" 
)

data <- list(trace1, trace2)

layout <- list(
  autosize = TRUE, 
  hovermode = "closest", 
  showlegend = TRUE, 
  xaxis = list(
    autorange = TRUE, 
    #range = c(-0.745097129104, 11.4882190132), 
    title = "", 
    type = "date",
    showgrid = FALSE
  ), 
  yaxis = list(
    autorange = TRUE, 
    #domain = c(0, 1), 
    #range = c(-50, -20), 
    title = "USD", 
    type = "linear",
    showgrid = FALSE
  ), 
  yaxis2 = list(
    anchor = "x", 
    autorange = TRUE, 
    overlaying = "y", 
    #range = c(-25.3091876767, 55.9930010303), 
    title = "USD", 
    side = "right", 
    type = "linear",
    showgrid = FALSE,
    showline = TRUE
  )
)


p <- plot_ly()
p <- add_trace(p, 
               x=trace1$x, 
               y=trace1$y, 
               line=trace1$line, 
               marker=trace1$marker, 
               mode=trace1$mode, 
               name=trace1$name, 
               opacity=trace1$opacity, 
               type=trace1$type, 
               uid=trace1$uid, 
               xaxis=trace1$xaxis, 
               yaxis=trace1$yaxis, 
               visible = TRUE 
               )
p <- add_trace(p, 
               x=trace2$x, 
               y=trace2$y, 
               line=trace2$line, 
               marker=trace2$marker, 
               mode=trace2$mode, 
               name=trace2$name, 
               type=trace2$type, 
               uid=trace2$uid, 
               yaxis=trace2$yaxis, 
               visible = TRUE
               )
p <- add_trace(p, 
               x=trace2$x, 
               y=trace2$y, 
               line=trace2$line, 
               marker=trace2$marker, 
               mode=trace2$mode, 
               name=trace2$name, 
               type=trace2$type, 
               uid=trace2$uid, 
               yaxis=trace2$yaxis, 
               visible = TRUE
               )
p <- add_trace(p, 
               x=trace1$x, 
               y=trace1$y, 
               line=trace1$line, 
               marker=trace1$marker, 
               mode=trace1$mode, 
               name=trace1$name, 
               opacity=trace1$opacity, 
               type=trace1$type, 
               uid=trace1$uid, 
               xaxis=trace1$xaxis, 
               yaxis=trace1$yaxis, 
               visible = TRUE
               )
p <- layout(p, 
            autosize=layout$autosize, 
            hovermode=layout$hovermode, 
            #showlegend=layout$showlegend, 
            xaxis=layout$xaxis, 
            yaxis=layout$yaxis, 
            yaxis2=layout$yaxis2,
            updatemenus = list(
   list(
      x = -0.15,
      y = 0.7,
      buttons = list(
        list(method = "update",
             args = list("visible", list(TRUE, FALSE, FALSE, FALSE)),
             label = "BTC"),
 
        list(method = "update",
             args = list("visible", list(FALSE, TRUE, FALSE, FALSE)),
             label = "ETH"))),
    list(
      x = -0.15,
      y = 0.8,
      buttons = list(
        list(method = "update",
             args = list("visible", list(FALSE, TRUE, FALSE, FALSE)),
             label = "ETH"),
 
        list(method = "update",
             args = list("visible", list(TRUE, FALSE, FALSE, FALSE)),
             label = "BTC")))
  ))

p
#https://plot.ly/python/custom-buttons/  follow to finalize
p <- layout(p,
  title = "Coin Price Comparison",
  autosize=layout$autosize, 
  hovermode=layout$hovermode, 
  showlegend=layout$showlegend, 
  xaxis=layout$xaxis, 
  yaxis=layout$yaxis, 
  yaxis2=layout$yaxis2,
  updatemenus = list(
   list(
      y = 0.7,
      buttons = list(
        list(method = "restyle",
             args = list("yaxis", list(layout$yaxis, layout$yaxis2)),
             label = "BTC"),
 
        list(method = "restyle",
             args = list("yaxis", list(layout$yaxis2, layout$yaxis)),
             label = "ETH"))),
    list(
      y = 0.7,
      buttons = list(
        list(method = "restyle",
             args = list("yaxis2", list(layout$yaxis2, layout$yaxis)),
             label = "ETH"),
 
        list(method = "restyle",
             args = list("yaxis2", list(layout$yaxis, layout$yaxis2)),
             label = "BTC")))
  ))
 
p

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.